package com.qfedu.scode.service.impl;

import com.qfedu.scode.config.SystemConfig;
import com.qfedu.scode.core.CodeGen;
import com.qfedu.scode.dao.DbconfigDao;
import com.qfedu.scode.dao.OssstorageDao;
import com.qfedu.scode.dto.DbConfigDto;
import com.qfedu.scode.dto.ProjectConfigDto;
import com.qfedu.scode.entity.Dbconfig;
import com.qfedu.scode.entity.Ossstorage;
import com.qfedu.scode.entity.Projectconfig;
import com.qfedu.scode.dao.ProjectconfigDao;
import com.qfedu.scode.service.intf.ProjectconfigService;
import com.qfedu.scode.util.*;
import com.qfedu.scode.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @program: StartCoding
 * @description: 一款真正的后端源码生成器，助力轻松入门Java程序
 * @author: Feri(老邢)
 * @create: 2021-01-06 11:09:45
 */
@Service
public class ProjectconfigServiceImpl implements ProjectconfigService{
    /*
    *注入持久层对象*/
    @Autowired
    private ProjectconfigDao dao;
    @Autowired
    private DbconfigDao dbconfigDao;
    @Autowired
    private OssstorageDao ossstorageDao;

    @Value("${scode.passkey}")
    private String key;
    /*
    * 新增内容*/
    @Override
    public R save(Projectconfig projectconfig) {
        if(projectconfig!=null){
            if(dao.insert(projectconfig)>0){
                return R.ok();
            }
        }
        return R.fail("新增异常");
    }
    /*
    * 查询 所有数据*/
    @Override
    public R queryAll() {
        return R.ok(dao.selectAll());
    }

    @Override
    public R queryByUid(String token) {
        int uid=TokenUtil.getUid(token);
        if(uid>0){
            return R.ok(dao.selectByUid(uid));
        }
        return R.fail();
    }

    @Override
    @Transactional
    public R createProject(String token, Projectconfig projectconfig) {
        //获取用户id
        int uid= TokenUtil.getUid(token);
        //校验
        if(projectconfig!=null && uid>0){
            //要生成的项目信息
            ProjectConfigDto configDto=new ProjectConfigDto();
            configDto.setPdesc(projectconfig.getPdesc());
            configDto.setPauthor(projectconfig.getPauthor());
            configDto.setPname(projectconfig.getPname());
            configDto.setPkname(projectconfig.getPkname());
            //项目对应的数据库信息
            DbConfigDto dbConfigDto=new DbConfigDto();
            Dbconfig dbconfig=dbconfigDao.selectById(projectconfig.getDbid());
            dbConfigDto.setPass(EncryptUtil.aesdec(key,dbconfig.getDbupass()));
            dbConfigDto.setUsername(EncryptUtil.aesdec(key,dbconfig.getDbuname()));
            dbConfigDto.setHost(EncryptUtil.aesdec(key,dbconfig.getDbhost()));
            dbConfigDto.setDbname(EncryptUtil.aesdec(key,dbconfig.getDbname()));
            dbConfigDto.setPort(dbconfig.getDbport());
            //获取上传源码之后的访问链接
            String url=CodeGen.createJava(configDto,dbConfigDto);

            if(StringUtil.isNoEmpty(url)){
                //记录数据库
                Ossstorage ossstorage=new Ossstorage(SystemConfig.OSS_BNAME,
                        FileUtil.CODE_DIR+".zip",url,SystemConfig.OSS_TYPE_SRC);
                ossstorageDao.insert(ossstorage);
                //项目生成表
                projectconfig.setOid(ossstorage.getId());
                projectconfig.setUid(uid);
                dao.insert(projectconfig);
                return R.ok(url);
            }
        }
        return R.fail();
    }
}